<?php

namespace Endor\EndorBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Endor\EndorBundle\Entity\Bodegas;
use Endor\EndorBundle\Model\InventarioModel;
use Endor\EndorBundle\Entity\Articulos;
use Endor\EndorBundle\Entity\SalidasCondicionadas;

class InventariosController extends Controller {
    
    public function indexAction() {
        return $this->render('EndorBundle:Inventarios:index.html.twig');
    }

    public function BodegasAction() {

        $em = $this->getDoctrine()->getEntityManager();
        $bodegas = $em->getRepository('EndorBundle:Bodegas')->findAll();
        $urlBodega = $this->generateUrl("inventarios_show_bodega", array("id" => ""));
        return $this->render("EndorBundle:Inventarios:Bodegas.html.twig", array(
                    'bodegas' => $bodegas,
                    'urlBodega' => $urlBodega
                ));
    }

    public function ShowBodegaAction($id) {
        $em = $this->getDoctrine()->getEntityManager();
        $bodega = $em->getRepository('EndorBundle:Bodegas')->find($id);

        $model = new InventarioModel($this->getDoctrine()->getConnection());

        $articulos = $model->GetByBodega($id);

        $urlMovimiento = $this->generateUrl("inventarios_movimientos", array("idBodega" => "", "idArticulo" => ""));
        return $this->render('EndorBundle:Inventarios:ShowBodega.html.twig', array('articulos' => $articulos, 'urlMovimiento' => $urlMovimiento, "bodega" => $bodega));
    }

    public function ShowMovimientosAction($idArticulo, $idBodega = null) {
        if ($idBodega == null) {
            return $this->_ShowMovimientos($idArticulo);
        } else {
            return $this->_ShowMovimientosByBodega($idBodega, $idArticulo);
        }
    }

    private function _ShowMovimientosByBodega($idBodega, $idArticulo) {
        $em = $this->getDoctrine()->getEntityManager();

        $entradas = $em->getRepository('EndorBundle:Entradas')->findBy(array(
            'Articulo' => $idArticulo, 'Bodega' => $idBodega
                ));

        $salidas = $em->getRepository('EndorBundle:Salidas')->findBy(array(
            'Articulo' => $idArticulo, 'Bodega' => $idBodega
                ));

        $model = new InventarioModel($this->getDoctrine()->getConnection());
        $result = $model->GetByBodega($idBodega);

        $articulo = $em->getRepository('EndorBundle:Articulos')->find($idArticulo);

        $nombreBodega = $result["0"]["nombre"];
        
        $urlNuevaSalidaCondicionada = $this->generateUrl("inventarios_nuevasalidacondicionada", array("id" => ""));

        return $this->render('EndorBundle:Inventarios:ShowMovimientos.html.twig', array(
                    'entradas' => $entradas, 'salidas' => $salidas, 'nombreBodega' => $nombreBodega, 'articulo' => $articulo,
                    "urlNuevaSalidaCondicionada" => $urlNuevaSalidaCondicionada
                ));
    }

    private function _ShowMovimientos($idArticulo) {

        $em = $this->getDoctrine()->getEntityManager();

        $Articulo = $em->getRepository('EndorBundle:Articulos')->find($idArticulo);

        $entradas = $em->getRepository('EndorBundle:Entradas')->findBy(array(
            'Articulo' => $idArticulo
                ));


        $salidas = $em->getRepository('EndorBundle:Salidas')->findBy(array(
            'Articulo' => $idArticulo
                ));
        
        $urlNuevaSalidaCondicionada = $this->generateUrl("inventarios_nuevasalidacondicionada", array("id" => ""));
        
        return $this->render('EndorBundle:Inventarios:ShowMovimientosArticulos.html.twig', array(
                    'entradas' => $entradas, 'salidas' => $salidas, 'articulo' => $Articulo, "urlNuevaSalidaCondicionada" => $urlNuevaSalidaCondicionada
                ));
    }

    public function ArticulosAction() {
        $model = new InventarioModel($this->getDoctrine()->getConnection());

        $articulos = $model->Get();

        $urlMovimiento = $this->generateUrl("inventarios_movimientos_articulos", array("idArticulo" => ""));

        return $this->render('EndorBundle:Inventarios:Articulos.html.twig', array(
                    'articulos' => $articulos, 'urlMovimiento' => $urlMovimiento
                ));
    }

    public function ClientesAction() {
        $em = $this->getDoctrine()->getEntityManager();

        $Clientes = $em->getRepository('EndorBundle:Clientes')->findAll();

        $urlMovimiento = $this->generateUrl("inventarios_movimientos_cliente", array("idCliente" => ""));

        return $this->render('EndorBundle:Inventarios:Clientes.html.twig', array(
                    'clientes' => $Clientes, 'urlMovimiento' => $urlMovimiento
                ));
    }

    public function MovimientosClienteAction($idCliente) {
        $em = $this->getDoctrine()->getEntityManager();
        $Cliente = $em->getRepository('EndorBundle:Clientes')->find($idCliente);

        $salidas = $em->getRepository('EndorBundle:Salidas')->findBy(array(
            'Cliente' => $idCliente
                ));

        return $this->render('EndorBundle:Inventarios:MovimientosCliente.html.twig', array(
                    'salidas' => $salidas, 'cliente' => $Cliente
                ));
    }

    public function ProveedoresAction() {
        $em = $this->getDoctrine()->getEntityManager();

        $Proveedores = $em->getRepository('EndorBundle:Proveedores')->findAll();

        $urlMovimiento = $this->generateUrl("inventarios_movimientos_proveedor", array("idProveedor" => ""));

        return $this->render('EndorBundle:Inventarios:Proveedores.html.twig', array(
                    'proveedores' => $Proveedores, 'urlMovimiento' => $urlMovimiento
                ));
    }

    public function MovimientosProveedorAction($idProveedor) {
        $em = $this->getDoctrine()->getEntityManager();
        $Proveedor = $em->getRepository('EndorBundle:Proveedores')->find($idProveedor);

        $entradas = $em->getRepository('EndorBundle:Entradas')->findBy(array(
            'Proveedor' => $idProveedor
                ));

        return $this->render('EndorBundle:Inventarios:MovimientosProveedor.html.twig', array(
                    'entradas' => $entradas, 'proveedor' => $Proveedor
                ));
    }

    /**
     * Displays a form to create a new SalidasCondicionadas entity.
     *
     */
    public function newSalidaCondicionadaAction($id) {        
        $em = $this->getDoctrine()->getEntityManager();
        $model = new InventarioModel($this->getDoctrine()->getConnection());
        $cantidad = $model->GetCantidadEntradas($id);
        $Entrada = $em->getRepository('EndorBundle:Entradas')->find($id);
        
        if (count($cantidad)>0) {
            $cantidad = $cantidad[0];
            $cantidad = $cantidad["cantidad"];
        } else {
            $cantidad = 0;
        }

        $cantidad = $Entrada->getCantidad() - $cantidad;

        $Clientes = $em->getRepository('EndorBundle:Clientes')->findAll();
        
        $Entrada->setCantidad($cantidad);

        $entity = new SalidasCondicionadas();

        return $this->render('EndorBundle:Inventarios:newSalidaCondicionada.html.twig', array(
            'entity' => $entity,
            'entrada' => $Entrada,
            'clientes' => $Clientes
        ));
        
    }

    /**
     * Creates a new SalidasCondicionadas entity.
     *
     */
    public function createSalidaCondicionadaAction() {
        $entity = new SalidasCondicionadas();
        $request = $this->getRequest();
        
        $em = $this->getDoctrine()->getEntityManager();
        
        $salidaCondicionada = $request->get("salidaCondicionada");
        
        $entity->setFecha(date_create($salidaCondicionada["fecha"]));
        $entity->setCantidad($salidaCondicionada["cantidad"]);
        $entrada = $salidaCondicionada["entrada"];
        $entrada = $em->getRepository("EndorBundle:Entradas")->find($entrada);
        $entity->setArticulo($entrada->getArticulo());
        $entity->setBodega($entrada->getBodega());
        $entity->setEntrada($entrada);
        $cliente = $salidaCondicionada["cliente"];
        $cliente = $em->getRepository("EndorBundle:Clientes")->find($cliente);
        $entity->setCliente($cliente);
        
        $em->persist($entity);
        $em->flush();
                
        return $this->indexAction();
    }

}

?>
